SPU_CREATE(2) | Linux Programmer's Manual | SPU_CREATE(2) |
名前¶
spu_create - 新しい SPU コンテキストを生成する
書式¶
#include <sys/types.h> #include <sys/spu.h> int spu_create(const char *pathname, int flags, mode_t mode);
説明¶
spu_create() システムコールは、Cell Broadband Engine アーキテクチャを実装した PowerPC マシンにおいて、Synergistic Processor Unit (SPU) にアクセスする ために使用される。 このシステムコールは、SPU に対する新しい論理コンテキストを pathname に生成し、そのコンテキストに関連付けられたファイルディスクリプタを返す。 pathname は SPU ファイルシステム (SPUFS) のマウントポイント内の 存在しないディレクトリを指していなければならない。 spu_create() が成功すると、 pathname にディレクトリが生成され、そのディレクトリに spufs(7) で説明されているファイル群が配置される。
返されたファイルハンドラは、 spu_run(2) に渡すか、クローズするかしかできない。 他の操作は定義されていない。 論理 SPU コンテキストが破棄されるのは、 コンテキスト自身へのファイルディスクリプタがクローズされ、 その中のファイルへのファイルディスクリプタが全てクローズされたときである。 SPU コンテキストが破棄されると、SPUFS 内のそのディレクトリの全てのエントリ が削除される。
引き数 flags にはゼロか以下の定数を指定できる。
- SPU_RAWIO
- SPU のハードウェアレジスタのいくつかをユーザ空間にマッピングすることを 許可する。このフラグを指定するには CAP_SYS_RAWIO ケーパビリティが必要である。
SPUFS 内に新しく生成されたディレクトリとファイルのアクセス許可は、 mode 引き数からそのプロセスの umask(2) を引いた値に設定される。 各ファイルの実際のアクセス許可は、そのファイルが読み出しアクセスや 書き込みアクセスをサポートしているかも考慮して決まる。
返り値¶
成功すると、 spu_create(2) は新しいファイルディスクリプタを返す。 エラーの場合、-1 を返し、 errno に以下のリストに記載のエラーコードのいずれかを設定する。
エラー¶
- EACCES
- 現在のユーザが SPUFS のマウントポイントへの書き込み許可を持っていない。
- EEXIST
- 指定されたパス名の SPU コンテキストがすでに生成されている。
- EFAULT
- pathname が現在のアドレス空間で有効な文字列ポインタではない。
- EINVAL
- pathname が SPUFS マウントポインタ内のディレクトリではない。
- ELOOP
- pathname を解決するまでに辿ったシンボリックリンクが多過ぎた。
- EMFILE
- そのプロセスがオープンできるファイル数の上限に達していた。
- ENAMETOOLONG
- pathname が長過ぎる。
- ENFILE
- システム全体でオープンできるファイル数の上限に達していた。
- ENOENT
- pathname の一部が解決できなかった。
- ENOMEM
- カーネルが必要なリソースの全てを割り当てることができなかった。
- ENOSPC
- 新しいコンテキストを生成するのに十分な SPU リソースがなかった、 または SPU コンテキスト数がそのユーザの特定の上限に達していた。
- ENOSYS
- 機能が動作中のシステムで提供されていない。理由は、 ハードウェアで SPU が提供されていないか、 spufs モジュールがロードされていないか、のどちらかである。
- ENOTDIR
- pathname の一部がディレクトリではない。
ファイル¶
pathname は SPUFS のマウントポイントの配下の場所を指していなければならない。 慣例では、SPUFS は /spu にマウントされる。
バージョン¶
spu_create(2) システムコールはカーネル 2.6.16 で Linux に追加された。
準拠¶
このシステムコールは Linux 固有であり、 ppc64 アーキテクチャでのみ実装されている。 このシステムコールを使ったプログラムは移植性がない。
注意¶
glibc はこのシステムコールに対するラッパー関数を提供していない。 syscall(2) を使うこと。ただし、 spu_create() は より抽象度の高い SPU へのインタフェースを実装するライブラリから 利用されることを意図したものであり、通常のアプリケーションから 使用は意図されていない。推奨のライブラリについては http://www.bsc.es/projects/deepcomputing/linuxoncell/ を参照のこと。
バグ¶
実際のコードではここで述べた全ての機能が完全に実装されているわけではない。
関連項目¶
2007-07-10 | Linux |